Multi-Commodity Market
nco
MINOS
AMPL
short
= 0;
check {(i,j) in ROADS}: cost[i,j] = cost[j,i];
param cmin {ROADS} > 0;
param TZERO >= 0;
param CCR >= 0;
param alpha {ROADS} >= 0;
param tr_matr {TRIPS};
param sqrt_offset default .01; # from CUTE's STEENBRE.SIF
node Balance {(k,l) in TRIPS, j in CITIES}:
net_in =
if l = j then tr_matr[k,l]
else if k = j then -tr_matr[k,l]
else 0;
var capacity {(i,j) in ROADS} >= cmin[i,j];
arc flow {(k,l) in TRIPS, (i,j) in ROADS} >= 0,
from Balance[k,l,i], to Balance[k,l,j];
var total_flow {(i,j) in ROADS} = sum {(k,l) in TRIPS} flow[k,l,i,j];
minimize Total_Cost:
sum {(i,j) in ROADS} (
cost[i,j] * alpha[i,j] *
sqrt(capacity[i,j] - cmin[i,j] + sqrt_offset)
+ total_flow[i,j] * cost[i,j] *
(TZERO + CCR * (total_flow[i,j] / capacity[i,j])^2)
);
]]>
data;
param alpha default .01;
var capacity default .1 [2,4] 2000.1 [4,2] 2000.1;
var flow default .1;
set ROADS: 1 2 3 4 5 6 7 8 9 :=
1 - + + - - - + - -
2 + - - + - - + + -
3 + - - - + - + + -
4 - + - - - + - + +
5 - - + - - + - + +
6 - - - + + - - - +
7 + + + - - - - + -
8 - + + + + - + - +
9 - - - + + + - + - ;
param: TRIPS: tr_matr :=
1 6 10000
2 3 2000
2 4 2000
2 5 1000
3 2 200
3 4 1000
3 5 2000
4 2 200
4 3 100
4 5 1000
5 2 100
5 3 200
5 4 100
6 1 1000 ;
param cost:
1 2 3 4 5 6 7 8 9 :=
1 . 35 40 . . . 30 . .
2 35 . . 100 . . 15 55 .
3 40 . . . 100 . 25 60 .
4 . 100 . . . 35 . 55 15
5 . . 100 . . 40 . 60 25
6 . . . 35 40 . . . 30
7 30 15 25 . . . . 50 .
8 . 55 60 55 60 . 50 . 50
9 . . . 15 25 30 . 50 . ;
param TZERO := 0.01;
param CCR := 0.01;
param cmin default 0.01 :=
[2,4] 2000
[4,2] 2000;
This model is based steenbre.mod available from
http://www.netlib.org/ampl/models/